#ifndef _GO_BANG_
#define _GO_BANG_

#include <iostream>

#include <cstdio>
#include <cstdlib>
#include <cstring>

#define ROW 15
#define COL 15
#define BLACK 'B'
#define WHITE 'O'

/**
 * 棋盘初始化函数，提供当前函数的参数是个 char 类型二维数组，
 * 数组的一维下标和二维下标由 ROW 和 COL 两个宏常量控制
 *
 * @param chess_board 用户提供的 char 类型二维数组
 */
void gobang_ui_init(char chess_board[][COL]);

/**
 * 棋盘展示函数，，提供当前函数的参数是个 char 类型二维数组，
 * 数组的一维下标和二维下标由 ROW 和 COL 两个宏常量控制
 *
 * @param chess_board 用户提供的 char 类型二维数组
 */
void show_chess_board(char chess_board[][COL]);

/**
 * 落子函数，根据当前玩家提供的行列下标位置，落子对应玩家的棋子
 * 
 * @param chess_board 当前五子棋对应的棋盘 char 类型二维数组
 * @param row_index   用户指定落子的行下标位置
 * @param col_index   用户指定落子的列下标位置
 * @param player      对应用户，利用 BLACK 和 WHITE 两个宏区分用户玩家
 * @return 落子成功返回 1，否则返回 0
 */
int place_stone(char chess_board[][COL], int row_index, int col_index, char player);


/**
 * 判断是否游戏获胜条件
 * 
 * @param chess_board 当前五子棋对应的棋盘 char 类型二维数组
 * @param row_index   用户指定落子的行下标位置
 * @param col_index   用户指定落子的列下标位置
 * @param player      对应用户，利用 BLACK 和 WHITE 两个宏区分用户玩家
 * @return 游戏胜利返回 1，否则返回 0
 */
int is_win(char chess_board[][COL], int row_index, int col_index, char player);

#endif